﻿/*************************************
 * Creator:SW-PeiYang
 * DateTime:2025/8/27 16:53:21
 * Description:<Description>
 * CopyRight:中广核研究院有限公司
 * ***********************************/

using Microsoft.Win32;

namespace SunnyPaine.Autofac.Extension.Mvvm.UI
{
    /// <summary>
    /// 提供用户可以指定要保存的文件的文件名。
    /// </summary>
    public class SaveFileDialogService : BaseService, ISaveFileDialogService
    {
        /// <summary>
        /// 如果用户省略了扩展名，文件对话框是否自动补齐扩展名。如果启用则为 true ，否则为 false 。默认值为 true 。
        /// </summary>
        public bool AutoAddExtension { get; set; } = true;
        /// <summary>
        /// 当用户指定不存在的文件名，文件对话框是否显示警告。默认值为 false 。
        /// </summary>
        public bool CheckFileExists { get; set; }
        /// <summary>
        /// 当用户指定了不存在的文件路径和文件名，文件对话框是否显示警告。默认值为 true 。
        /// </summary>
        public bool CheckPathExists { get; set; } = true;
        /// <summary>
        /// 当用户要创建一个不存在的文件，文件对话框是否显示提示。默认值为 false 。
        /// </summary>
        public bool CreatePrompt { get; set; }
        /// <summary>
        /// 指定用来筛选现实的文件列表的默认扩展名字符串。默认值为 <see cref="string.Empty"/> 。
        /// </summary>
        public string DefaultExt { get; set; } = string.Empty;
        /// <summary>
        /// 文件对话框中选定的文件的完整路径。默认值为 <see cref="string.Empty"/> 。
        /// </summary>
        public string FileName { get; set; } = string.Empty;
        /// <summary>
        /// 包含与选定的文件逐一对应的文件完整路径。
        /// </summary>
        public string[] FileNames { get; private set; }
        /// <summary>
        /// 筛选器字符串。默认值 <see cref="string.Empty"/> 。
        /// </summary>
        public string Filter { get; set; } = string.Empty;
        /// <summary>
        /// 文件对话框的初始目录。默认值为 <see cref="string.Empty"/> 。
        /// </summary>
        public string InitialDirectory { get; set; } = string.Empty;
        /// <summary>
        /// 是否允许用户选择多个文件。默认值为 false 。
        /// </summary>
        public bool Multiselect { get; set; }
        /// <summary>
        /// 对话框标题。默认值为 <see cref="string.Empty"/>
        /// </summary>
        public string Title { get; set; } = string.Empty;
        /// <summary>
        /// 当用户要保存的文件的文件名已经存在，文件对话框是否显示提示。默认值为 true 。
        /// </summary>
        public bool OverwritePrompt { get; set; } = true;



        /// <summary>
        /// 显示对话款。
        /// </summary>
        /// <returns></returns>
        public bool? ShowDialog()
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.AddExtension = this.AutoAddExtension;
            dialog.CheckFileExists = this.CheckFileExists;
            dialog.CheckPathExists = this.CheckPathExists;
            dialog.CreatePrompt = this.CreatePrompt;
            dialog.DefaultExt = this.DefaultExt;
            dialog.FileName = this.FileName;
            dialog.Filter = this.Filter;
            dialog.InitialDirectory = this.InitialDirectory;
            dialog.Title = this.Title;
            dialog.OverwritePrompt = this.OverwritePrompt;
            bool? flag = dialog.ShowDialog();
            if (flag == true)
            {
                this.FileName = dialog.FileName;
                this.FileNames = dialog.FileNames;
            }
            return true;
        }
    }
}
